import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.List;
import java.util.Map;

import entrepot.*;
import commande.*;
import graphe.*;



public class Test {
	public static void main(String[] args) {
		// Creation du graphe
		Graphe g = new Graphe();
		Emplacement e1= new Emplacement(1, false, false);
		Emplacement e2= new Emplacement(2, false, false);
		Emplacement e3= new Emplacement(3, false, true);
		Emplacement e4= new Emplacement(4, false, false);
		Emplacement e5= new Emplacement(5, false, false);
		Emplacement e6= new Emplacement(6, false, true);
		Emplacement e7= new Emplacement(7, false, false);
		Emplacement e8= new Emplacement(8, false, false);
		Emplacement e9= new Emplacement(9, true, false);
		Emplacement e10= new Emplacement(10, false, false);
		Emplacement e11= new Emplacement(11, false, false);
		Emplacement e12= new Emplacement(12, true, false);
		Emplacement e13= new Emplacement(13, false, false);
		Emplacement e14= new Emplacement(14, false, false);
		Emplacement e15= new Emplacement(15, false, true);
		Emplacement e16= new Emplacement(16, false, false);
		Emplacement e17= new Emplacement(17, false, false);
		Emplacement e18= new Emplacement(18, false, true);
		Emplacement e19= new Emplacement(19, false, false);
		Emplacement e20= new Emplacement(20, false, false);
		Emplacement e21= new Emplacement(21, true, false);

		Produit[] listProduit = new Produit[20];
		Produit p1 = new Produit("p1", 1,100 , e1.getPosition());
		Produit p2 = new Produit("p2", 2,200 , e20.getPosition());
		Produit p3 = new Produit("p3", 3,300 , e15.getPosition());
		Produit p4 = new Produit("p4", 4,400 , e5.getPosition());
		Produit p5 = new Produit("p5", 5,500 , e18.getPosition());
		Produit p6 = new Produit("p6", 6,600 , e3.getPosition());
		Produit p7 = new Produit("p7", 7,700 , e19.getPosition());
		Produit p8 = new Produit("p8", 8,800 , e6.getPosition());
		Produit p9 = new Produit("p9", 9,900 , e7.getPosition());
		Produit p10 = new Produit("p10", 10,1000 , e2.getPosition());
		Produit p11 = new Produit("p11", 11,1100 , e10.getPosition());
		Produit p12 = new Produit("p12", 12,1200 , e17.getPosition());
		Produit p13 = new Produit("p13", 1,1300 , e4.getPosition());
		Produit p14 = new Produit("p14", 1,1400 , e9.getPosition());
		Produit p15 = new Produit("p15", 1,1500 , e8.getPosition());
		Produit p16 = new Produit("p16", 1,1600 , e12.getPosition());
		Produit p17 = new Produit("p17", 1,1700 , e13.getPosition());
		Produit p18 = new Produit("p18", 1,1800 , e16.getPosition());
		Produit p19 = new Produit("p19", 1,1900 , e14.getPosition());
		Produit p20 = new Produit("p20", 1,2000 , e11.getPosition());
		listProduit[0] = p1;
		listProduit[1] = p2;
		listProduit[2] = p3;
		listProduit[3] = p4;
		listProduit[4] = p5;
		listProduit[5] = p6;
		listProduit[6] = p7;
		listProduit[7] = p8;
		listProduit[8] = p9;
		listProduit[9] = p10;
		listProduit[10] = p11;
		listProduit[11] = p12;
		listProduit[12] = p13;
		listProduit[13] = p14;
		listProduit[14] = p15;
		listProduit[15] = p16;
		listProduit[16] = p17;
		listProduit[17] = p18;
		listProduit[18] = p19;
		listProduit[19] = p20;
		
		
//		// création noeuds
//		Noeud n1= new Noeud(e1, g);
//		Noeud n2= new Noeud(e2, g);
//		Noeud n3= new Noeud(e3, g);
//		Noeud n4= new Noeud(e4, g);
//		Noeud n5= new Noeud(e5, g);
//		Noeud n6= new Noeud(e6, g);
//		Noeud n7= new Noeud(e7, g);
//		Noeud n8= new Noeud(e8, g);
//		Noeud n9= new Noeud(e9, g);
//		Noeud n10= new Noeud(e10, g);
//		Noeud n11= new Noeud(e11, g);
//		Noeud n12= new Noeud(e12, g);
//		Noeud n13= new Noeud(e13, g);
//		Noeud n14= new Noeud(e14, g);
//		Noeud n15= new Noeud(e15, g);
//		Noeud n16= new Noeud(e16, g);
//		Noeud n17= new Noeud(e17, g);
//		Noeud n18= new Noeud(e18, g);
//		Noeud n19= new Noeud(e19, g);
//		Noeud n20= new Noeud(e20, g);
//		Noeud n21= new Noeud(e21, g);
//	    // création arcs
//	    new Arc(n1,n2, g);
//	    new Arc(n2,n3,g);
//	    new Arc(n4,n1,g);
//	    new Arc(n5,n2,g);
//	    new Arc(n4,n5,g);
//	    new Arc(n5,n6,g);
//	    new Arc(n7,n4,g);
//	    new Arc(n8,n5,g);
//	    new Arc(n8,n7,g);
//	    new Arc(n9,n8,g);
//	    new Arc(n10,n7,g);
//	    new Arc(n11,n8,g);
//	    new Arc(n12,n11,g);
//	    new Arc(n11,n10,g);
//	    new Arc(n13,n10,g);
//	    new Arc(n14,n11,g);
//	    new Arc(n13,n14,g);
//	    new Arc(n14,n15,g);
//	    new Arc(n16,n13,g);
//	    new Arc(n17,n14,g);
//	    new Arc(n16,n17,g);
//	    new Arc(n17,n18,g);
//	    new Arc(n19,n16,g);
//	    new Arc(n20,n17,g);
//	    new Arc(n21,n18,g);
//	    new Arc(n20,n19,g);
//	    new Arc(n21,n20,g);
	    
	    // création commandes
	    

	    List <Commande> commandes= new LinkedList<Commande>();
	    for (int i=1;i<6;i++){
		    Commande c =new Commande(i);
		    c.ajoutProduit(listProduit[2]);
		    c.ajoutProduit(listProduit[2]);
		    c.ajoutProduit(listProduit[3]);
		    c.ajoutProduit(listProduit[6]);
		    c.ajoutProduit(listProduit[6]);
		    c.ajoutProduit(listProduit[7]);
		    c.ajoutProduit(listProduit[10]);
		    c.ajoutProduit(listProduit[12]);
		    c.ajoutProduit(listProduit[12]);
		    c.ajoutProduit(listProduit[19]);
		   	commandes.add(c);
	    }
	    
	    for (int i=1;i<6;i++){
		    Commande c =new Commande(i);
		    c.ajoutProduit(listProduit[1]);
		    c.ajoutProduit(listProduit[4]);
		    c.ajoutProduit(listProduit[5]);
		    c.ajoutProduit(listProduit[8]);
		    c.ajoutProduit(listProduit[8]);
		    c.ajoutProduit(listProduit[8]);
		    c.ajoutProduit(listProduit[15]);
		    c.ajoutProduit(listProduit[16]);
		    c.ajoutProduit(listProduit[18]);
		    c.ajoutProduit(listProduit[18]);
		   	commandes.add(c);
	    }

	    // Tableau regroupement commandes
	    OneRunCommandes regroupedCmds = new OneRunCommandes(commandes);
	    algoPicking(regroupedCmds);

	}
	
	public static void algoPicking(OneRunCommandes regroupedCmds)
	{

		for( Map.Entry<Produit, Integer> entry : regroupedCmds.cmds.entrySet()){
			Produit p = entry.getKey();
			Integer i = entry.getValue();
			System.out.println(p.getNom() + "=>"+i);
		}
	}
}
